SND13 - siMonitorSource ÉZÉåÉNÉ^

(98 îN 4 åé 12 ì˙)

Q: siMonitorAvailable Ç®ÇÊÇ— siMonitorSource ÉZÉåÉNÉ^ÇÕÇ«ÇÃÇÊǧDžǵǃégÇ¡ÇΩÇÁÇÊÇ¢ÇÃÇ≈ǵÇÂǧǩÅB

A: DZÇÍÇÁÇÃÉZÉåÉNÉ^ÇÕÉTÉEÉìÉhèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇ≈égópÇ∑ÇÈLJÇÃÇ≈ÅAÉÜÅ[ÉUÇ™ï∑DZǶÇÈÉ\Å[ÉXÇëIëǵǃÅAǪÇÍÇÉfÉtÉHÉãÉgÇÃò^âπópÉ\Å[ÉXÇΔǵNjÇ∑ÅBDZÇÃÉZÉåÉNÉ^ÇÕÉTÉEÉìÉhèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇæÇØÇ≈égópÇ∑ÇÈLJÇÃÇ»ÇÃÇ≈ÅADZÇÃÇΩÇflÇ…ÉTÉEÉìÉhÉ`ÉÉÉlÉãÇégópÇ∑ÇÈïKóvÇÕdžÇËÇ‹ÇπÇÒÅB

siMonitorAvailable ÉZÉåÉNÉ^ÇÕÅAsiOSTypeInputAvailable ìØólÅASoundInfoList Çï‘ǵNjÇ∑ÅBDZÇÍÇÕ short ÇΔ Handle ÇÃç\ë¢ëÃÇ≈Ç∑ÅBDZÇÃÉnÉìÉhÉãÇ…ÇÕÉÇÉjÉ^â¬î\Ç»ì¸óÕÉ\Å[ÉXÇà OSTypes ÇÃîzóÒÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅBSoundInfoList ç\ë¢ëÃÇÃëÄçÏï˚ñ@ÇÃè⁄ç◊DžǬǢǃÇÕÅAÅuQ&A SND12ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

ÉTÉEÉìÉhèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇíTǵÅAsiMonitorSource Ç®ÇÊÇ— siMonitorAvailable ÉZÉåÉNÉ^ÇégópÇ∑ÇÈï˚ñ@Çé¶Ç∑ÅAÉTÉìÉvÉãÉRÅ[ÉhÇà»â∫Ç…åfç⁄ǵNjÇ∑ÅB

#include    <Sound.h>#include    <Errors.h>#include    <Memory.h>
// égópâ¬î\Ç»ÉÇÉjÉ^É\Å[ÉXÇéÊìæÇµÅAǪÇÍǺÇÍÇÃñºëOÇí≤Ç◊ÅA
// Ç«ÇÃÉ\Å[ÉXÇ™ÉAÉNÉeÉBÉuÇ©í≤Ç◊ÅAÇ≥NjǥNjǻÉ\Å[ÉXÇê›íËÇ∑ÇÈ
// ä»íPÇ»ÉAÉvÉäÉPÅ[ÉVÉáÉì

void main(void) {
    NumVersionVariant       smVersion;
    ComponentResult         err;
    OSType                  source;
    SoundInfoList           monitorList;
    Component               device;
    ComponentDescription    looking;

    smVersion.parts = SndSoundManagerVersion();

    // SoundComponentGet/SetInfo ä÷êîÇÕÅASound Manager 3.1 à»ç~Ç≈ÇÃÇ›óòópâ¬î\ÅB
    // System 7.5 à»ç~Ç≈ìÆçÏǵǃǢÇÈDZÇΔÇ™ÇÌǩǡǃǢÇÈèÍçáÇÕÅA
    // SM ÉoÅ[ÉWÉáÉìÇÃÉ`ÉFÉbÉNÇÕè»ó™â¬î\ÅB

    if (smVersion.whole >= 0x03100000) {
        looking.componentType = kSoundOutputDeviceType;
        looking.componentSubType = 0;
        looking.componentManufacturer = kAppleManufacturer;
        looking.componentFlags = 0;
        looking.componentFlagsMask = 0;
        device = FindNextComponent (0, &looking);

        // égópâ¬î\Ç»ÉÇÉjÉ^É\Å[ÉXÇÃÉäÉXÉgÇéÊìæÇ∑ÇÈï˚ñ@Çà»â∫Ç…é¶Ç∑
        // (ÉÇÉjÉ^É\Å[ÉXÇ™ÉTÉ|Å[ÉgÇ≥ÇÍǃǢÇÈǩLJí≤Ç◊ÇÈ)
        // ǪÇÃåãâ ÅAäeÉ\Å[ÉXÇà OSTypes ÇÃÉäÉXÉgÇ™ìæÇÁÇÍÇÈ
        // (džÇΔÇ≈ÉnÉìÉhÉãÇÃîjä¸ÇñYÇÍǻǢÇÊǧDž) 

        err = GetSoundOutputInfo(device, siMonitorAvailable, &monitorList);

        if (err != noErr)                        // ÉÇÉjÉ^É\Å[ÉXÇ™ÉTÉ|Å[ÉgÇ≥ÇÍǃǢǻǢÇΩÇflÅAé©ï™Ç≈çsǧÅB
             goto Exit;

        DisposeHandle(monitorList.infoHandle);   // ï‘Ç≥ÇÍÇΩÉnÉìÉhÉãÇîjä¸Ç∑ÇÈÇÃÇñYÇÍǻǢDZÇΔ

        // Ç«ÇÃÉ\Å[ÉXÇ™ÉÇÉjÉ^Ç≥ÇÍǃǢÇÈÇÃÇ©Çí≤Ç◊ÇÈ
        GetSoundOutputInfo(device, siMonitorSource, &source);

        // CD ÇÉÇÉjÉ^É\Å[ÉXÇΔǵǃê›íËÇ∑ÇÈ (Ç∑Ç≈Ç…ë∂ç›Ç∑ÇÈèÍçáÅBerr <> noErr ÇæÇΔë∂ç›ÇµÇ»Ç¢) 
        err = SetSoundOutputInfo(device, siMonitorSource, (void *)kCDSource);

        // çƒìxÉÇÉjÉ^É\Å[ÉXÇí≤Ç◊ÅAè„ÇÃê›íËÇ™ã@î\ǵÇΩÇ©ämîFÇ∑ÇÈÅB
        err = GetSoundOutputInfo(device, siMonitorSource, &source);
    }

Exit:
    return;
}

ÉZÉåÉNÉ^ÇÕ Universal Headers 3.1 à»ç~Ç≈ÅAéüÇÃÇÊǧDžíËã`Ç≥ÇÍǃǢNjÇ∑ÅB

   siMonitorAvailable            = FOUR_CHAR_CODE('mnav'),
   siMonitorSource               = FOUR_CHAR_CODE('mons'),

-- Mark Cookson
devsupport@apple.com


[ Technical Q&A's : Graphics & Media : QuickTime : Sound : SND13 ]